package com.znsd.zl.app.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.znsd.zl.app.user.entity.AppUserEntity;
import com.znsd.zl.app.user.vo.req.AppUserLoginReqVO;
import com.znsd.zl.app.user.vo.req.AppUserRealAuthReqVO;
import com.znsd.zl.app.user.vo.req.RecognitionIdCardInfoReqVO;
import com.znsd.zl.utils.R;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;

/**
 * <p>
 *     客户端用户业务层接口
 * </p>
 * @ClassName IAppUserService
 * @Description 客户端用户业务层接口
 * @author jaypdd
 * @email jaypdd@163.com
 * @date 2020-08-21 17:26:01
 * @Version v1.0
 */
public interface IAppUserService extends IService<AppUserEntity> {

	/**
	 * 根据openId获取用户信息
	 * @param openId openid
	 * @return       返回对应用户信息
	 */
	AppUserEntity findAppUserByOpenId(String openId);

	/**
	 * 用户登录
	 * @param code  登录临时凭证换取openid进行登录
	 * @return      返回对应的单个用户信息
	 */
	String login(String code);

	/**
	 * 根据openid获取用户信息
	 * @param token token
	 * @return  返回用户信息
	 */
	AppUserEntity getUserInfo(String token);

	/**
	 * 完善用户信息
	 * @param user  用户信息
	 * @param token token
	 * @return      操作成功true 失败false
	 */
	boolean updateInfo(AppUserEntity user, String token);

	/**
	 * 用户退出登录
	 * @param token 用户令牌
	 */
	void logout(String token);

	/**
	 * 根据字典值查询字典id
	 * @param itemText  字典值
	 * @return          返回对应的字典id
	 */
	Integer findDictByItemText(String itemText);

	/**
	 * 校验用户是否存在
	 * @param code  用户凭证换取openid
	 * @return      存在返回true不存在返回false
	 */
	boolean verifyUserExists(String code);

	/**
	 * 用户实名认证
	 * @param reqVO 认证用户信息vo对象
	 * @return      认证成功 true，失败false
	 */
	boolean userRealNameAuth(AppUserRealAuthReqVO reqVO);

	/**
	 * 用户绑定微信手机号
	 * @param encryptedData 用户加密信息
	 * @param iv            加密算法向量
	 * @param token         登录用户token信息
	 * @return              绑定成功：true，失败：false
	 */
	boolean userBindPhone(String encryptedData, String iv, String token);

	/**
	 * 识别证件信息
	 * @param reqVO 识别的证件类型，证件加密串
	 * @return      识别成功返回证件信息data
	 */
	R recognitionIdCardInfo(RecognitionIdCardInfoReqVO reqVO);
}

